
// 单例模式

#include <iostream>

using namespace std;

// // 饿汉方式
// class singleton
// {
// public:
//     static singleton& get_instance()
//     {
//         return _s;
//     }

//     singleton(const singleton&) = delete;
//     singleton& operator=(const singleton&) = delete;

// private:
//     singleton():_data(0){cout << "单例构造" << endl;}
//     ~singleton(){}

// private:
//     int _data;
//     static singleton _s;
// };
// singleton singleton::_s;


// 懒汉方式
class singleton
{
private:
    int _data;

private:
    singleton():_data(0){cout << "单例构造" << endl;}
    ~singleton(){}

public:
    singleton(const singleton&) = delete;
    singleton& operator=(const singleton&) = delete;

    static singleton& get_instance()
    {
        // C++11特性保证多线程初始化静态局部变量只发生一次
        static singleton s;
        return s;
    }

    void print()
    {
        cout << "violet" << endl;
    }
};

int main()
{
    singleton::get_instance().print();

    return 0;
}